Time Machine 是 Mac 上的備份功能,以往要買貴貴的 AirPort Time Capsule 才能使用,後來市售的 NAS 也多半有這項功能,現在也可以用外接硬碟來做,不過其實家裡如果有台 Linux Server 的話也是可以搞一台 custom 的 Time Machine Server 來玩,不僅便宜,而且容量也可以弄比較充裕。
大家應該多少聽過 SAMBA 這個 Windows 與 Linux 通用的 File Server,Mac 則是有它專屬的協定叫 AFP,基本上 Time Machine 就是利用 AFP File Server 來做備份檔的 storage,現在似乎也可以用 SAMBA 來做 Time Machine 的 Server,不過這邊還是先介紹用 Linux 建一個 AFP Server 來給 macOS 使用。
環境說明
系統:CentOS 8 minimal install
Time Machine 使用的備份目錄:/media/tmBackup(已掛載一顆 200G 的空白磁區到該目錄)
Server side
安裝 Netatalk、Avahi
Netatalk 是一個開源的專案,可以在 Unix-Like 的系統建立 AFP Service 來給 Mac 使用,avahi 則是可以讓 macOS 可以自動抓到遠端 server 的程序。
在 CentOS 7 之前的 netatalk 需要自己編譯才能安裝,不過在 8 版已經變得相當容易了
sudo dnf install epel-release
sudo dnf install netatalk avahi
Netatalk 與 Avahi 設定
為 avahi 新增 afpd 的設定檔
cat << EOF | sudo tee -a /etc/avahi/services/afpd.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
</service-group>
EOF
編輯 netatalk 的設定檔
sudo cp /etc/netatalk/afp.conf /etc/netatalk/afp.conf.bak
cat << EOF | sudo tee -a /etc/netatalk/afp.conf
[My Time Machine]
path = /media/tmBackup
valid users = tmUser
time machine = yes
EOF
- [My Time Machine]:AFP 的 share name,也是 macOS 裡顯示的磁碟名稱
- path:備份檔存放的目錄
- valid users:可使用的 user,這邊新增一個叫 tmUser 的使用者
- time machine = yes:宣告該目錄可被 Time Machine 使用
/etc/netatalk/afp.conf,這個設定檔就跟 SAMBA 的 config 一樣,裡面可以定義許多不同的 share point 讓 macOS 來掛載
新增 netatalk 的 afpd 設定檔
cat << EOF | sudo tee -a /etc/netatalk/afpd.conf
- -transall -uamlist uams_randnum.so,uams_dhx.so,uams_dhx2.so -nosavepassword -advertise_ssh
EOF
新增 netatalk 的 Time Machine 目錄設定值
cat << EOF | sudo tee -a /etc/netatalk/AppleVolumes.default
/media/tmBackup TimeMachine allow:tmUser options:usedots,upriv,tm dperm:0775 fperm:0660 cnidscheme:dbd volsizelimit:200000
EOF
- /media/tmBackup:備份檔存放的目錄,請依環境自訂
- allow: 要使用的 user,本例為 tmUser
編輯 /etc/nsswitch.conf 檔
cat << EOF | sudo tee -a /etc/nsswitch.conf
hosts: files mdns4_minimal dns mdns mdns4
EOF
為 Time Machine 新增使用者並設定密碼
sudo useradd tmUser
sudo passwd tmUser
調整 Time Machine 備份路徑 /media/tmBackup 的權限
sudo chown tmUser: /media/tmBackup
設定防火牆,開啟 tcp 548 port 給 afpd、udp 5353 port 給 avahi
sudo firewall-cmd --add-port=548/tcp --permanent
sudo firewall-cmd --add-port=5353/udp --permanent
sudo firewall-cmd --reload
設定讓 netatalk 與 avahi 於開機時自動執行並且啟動它們
sudo systemctl enable avahi-daemon netatalk
sudo systemctl start avahi-daemon netatalk
macOS side
Server 設定好之後,要在 macOS 上開啟 Time Machine 基本上就是照一般的流程即可
首先開啟 系統偏好設定 接著選 Time Machine
接著點選 選擇備份磁碟
選擇 My Time Machine
選完後會跳出輸入使用者名稱與密碼,用剛才另外建立的 tmUser
登入後,Time Machine 就可以開始使用了,第一次備份會比較久,在選項中可以排除不要備份的目錄
回到 Server 上看,/media/tmBackup 裡出現 Time Machine 的檔案了,記得先切換到 tmUser
ls -al /media/tmBackup/
# 執行結果
total 8
drwxr-xr-x. 3 tmUser tmUser 45 Jul 31 03:59 .
drwxr-xr-x. 3 root root 22 Jul 31 03:03 ..
drwx--S---. 3 tmUser tmUser 209 Jul 31 03:44 'Wade的MacBook Pro.sparsebundle'
ls -al /media/tmBackup/Wade的MacBook\ Pro.sparsebundle
# 執行結果
total 68
drwx--S---. 3 tmUser tmUser 209 Jul 31 03:44 .
drwxr-xr-x. 3 tmUser tmUser 45 Jul 31 04:00 ..
drwx--S---. 2 tmUser tmUser 8192 Jul 31 04:00 bands
-rw-r--r--. 1 tmUser tmUser 515 Jul 31 03:49 com.apple.TimeMachine.MachineID.bckup
-rw-r--r--. 1 tmUser tmUser 515 Jul 31 03:49 com.apple.TimeMachine.MachineID.plist
-rw-r--r--. 1 tmUser tmUser 220 Jul 31 03:49 com.apple.TimeMachine.SnapshotHistory.plist
-rw-r--r--. 1 tmUser tmUser 498 Jul 31 03:49 Info.bckup
-rw-r--r--. 1 tmUser tmUser 498 Jul 31 03:49 Info.plist
-rwx------. 1 tmUser tmUser 0 Jul 31 03:49 token
參考資料:
AFP and SMB File Sharing on CentOS 7